#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>

using namespace std;

typedef long long LL;

const int MOD = 998244353;

LL qmi(LL a, LL b)
{
    LL res = 1;
    while (b)
    {
        if (b & 1)   res = res * a % MOD;
        a = a * a % MOD;
        b >>= 1;
    }
    return res;
}

int main()
{
    LL a, b;
    cin >> a >> b;

    if (a == 1)
    {
        cout << 0 << endl;
        return 0;
    }

    LL res = a, x = a;
    for (int i = 2; i * i <= x; i++)
        if (x % i == 0)
        {
            while (x % i == 0)   x /= i;
            res = res / i * (i - 1);
        }
    if (x > 1)   res = res / x * (x - 1);
    cout << res * qmi(a, b - 1) % MOD << endl;
    return 0;
}

//#include<iostream>
//#include<vector>
//#include<algorithm>
//
//using namespace std;
//
//typedef long long LL;
//
//int n;
//vector<int> w[10];
//
//int main()
//{
//    scanf("%d", &n);
//    for (int i = 0; i < n; i++)
//    {
//        int a, b;
//        scanf("%d%d", &a, &b);
//        w[a].push_back(b);
//    }
//
//    LL res = 0;
//    int avg = n / 10;
//    for (int i = 0; i < 10; i++)
//        if (w[i].size() > avg)
//        {
//            sort(w[i].begin(), w[i].end());
//            for (int j = 0; j < w[i].size() - avg; j++)
//                res += w[i][j];
//        }
//    printf("%lld\n", res);
//    return 0;
//}